package org.web.accesscontrollist.sdk.biz;

import org.web.accesscontrollist.sdk.dto.AclResourceTypeBatchDTO;
import org.web.accesscontrollist.sdk.dto.AclResourceTypeDTO;
import org.web.accesscontrollist.sdk.dto.query.QueryAclResourceTypeRequest;
import org.web.accesscontrollist.sdk.dto.redundancy.TypeRedundancyDTO;
import org.web.base.domain.ResultDO;

import java.util.List;

public interface AclResourceTypeBiz {


    /**
     * 校验数据信息：
     *
     * @see org.web.accesscontrollist.sdk.helper.AclHelper . checkSaveAclDetailBatchDTO(aclResourceTypeBatchDTO , UpdateGroup.class)
     * 1、@see AclResourceTypeBatchDTO , AclResourceTypeBatchDTO.class定义的数据格式。
     * 2、@see AclResourceTypeDTO , 遍历 List<AclResourceTypeDTO> aclResourceTypeDTOList ， 校验每个AclResourceTypeDTO对象。
     * 3、aclResourceTypeDTOList 中的typeName不能够重复。
     * 4、AclResourceTypeDTO 如果aclResourceTypeDTO.getMaxLevel() 大于零，则校验Level的合法性。
     * 第二部分，支持幂等处理，查询数据库。根据businessLine和typeName， 校验唯一性。
     * 构建InsertList和UpdateList, 如果数据记录不存在，还要执行ValidationHelper.validate(AclResourceTypeDTO.class, aclResourceTypeDTO, InsertGroup.class)，判断新增记录的合法性。
     * 使用限制说明
     * （1）结果自动返回主键ID，但是业务接入方，禁止直接使用主键，而是通过逻辑唯一数据，进行交互处理。
     * 从业务角度分析，该接口是低频操作，且有businessLine隔离。不对下面规格做主张处理。
     * （2）存在并发问题，不对并发产生的问题做处理。
     * （3）不对性能和处理时效做处理，
     */
    ResultDO<List<AclResourceTypeDTO>> saveAclResourceTypeBatch(AclResourceTypeBatchDTO aclResourceTypeBatchDTO);


    /***
     *  (1)删除的处理逻辑，如果detail表，存在type_name，则不允许删除，需要提前删除 detail 表中的type_name信息， 该接口不会自动 删除 detail 表中的数据。
     *  (2)type_name 的变更与删除，只能操作type_name. 会同步更新 detail和binding。
     */
    ResultDO<Integer> executeAclResourceTypeRedundancyDTO(TypeRedundancyDTO aclResourceTypeRedundancyDTO);


    ResultDO<List<AclResourceTypeDTO>> selectAclResourceTypeList(QueryAclResourceTypeRequest queryAclResourceTypeRequest);


}
